﻿using Sage.FreeSqlManager.Tenant;

namespace Sage.FreeSqlManager.Core
{
    /// <summary>
    /// FreeSql工厂接口 - 定义获取FreeSql实例的方法
    /// </summary>
    public interface IFreeSqlFactory
    {
        /// <summary>
        /// 获取指定名称的FreeSql实例
        /// </summary>
        /// <param name="dbName">数据库名称，对应配置中的键名</param>
        /// <returns>FreeSql实例</returns>
        /// <exception cref="ArgumentException">指定名称的数据库不存在时抛出</exception>
        IFreeSql GetFreeSql(string dbName);

        /// <summary>
        /// 检查是否包含指定名称的数据库
        /// </summary>
        /// <param name="dbName">数据库名称</param>
        /// <returns>如果包含返回true，否则返回false</returns>
        bool ContainsDatabase(string dbName);

        /// <summary>
        /// 创建租户作用域，临时切换租户上下文
        /// </summary>
        /// <param name="dbName">数据库名称</param>
        /// <param name="tenantId">租户ID</param>
        /// <returns>租户作用域，使用using语句确保资源释放</returns>
        /// <exception cref="ArgumentException">指定名称的数据库不存在时抛出</exception>
        TenantScope CreateTenantScope(string dbName, long tenantId);
    }
}